home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / sun / print / Win32PrintServiceLookup.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  5.0 KB  |  271 lines

  1. package sun.print;
  2.  
  3. import java.security.AccessController;
  4. import java.util.ArrayList;
  5. import javax.print.DocFlavor;
  6. import javax.print.MultiDocPrintService;
  7. import javax.print.PrintService;
  8. import javax.print.PrintServiceLookup;
  9. import javax.print.attribute.Attribute;
  10. import javax.print.attribute.AttributeSet;
  11. import javax.print.attribute.HashPrintRequestAttributeSet;
  12. import javax.print.attribute.HashPrintServiceAttributeSet;
  13. import javax.print.attribute.PrintRequestAttribute;
  14. import javax.print.attribute.PrintServiceAttribute;
  15. import javax.print.attribute.PrintServiceAttributeSet;
  16. import javax.print.attribute.standard.PrinterName;
  17. import sun.security.action.GetPropertyAction;
  18. import sun.security.action.LoadLibraryAction;
  19.  
  20. public class Win32PrintServiceLookup extends PrintServiceLookup {
  21.    private String defaultPrinter;
  22.    private PrintService defaultPrintService;
  23.    private String[] printers;
  24.    private PrintService[] printServices;
  25.    private static Win32PrintServiceLookup win32PrintLUS;
  26.  
  27.    public static Win32PrintServiceLookup getWin32PrintLUS() {
  28.       if (win32PrintLUS == null) {
  29.          PrintServiceLookup.lookupDefaultPrintService();
  30.       }
  31.  
  32.       return win32PrintLUS;
  33.    }
  34.  
  35.    public Win32PrintServiceLookup() {
  36.       if (win32PrintLUS == null) {
  37.          win32PrintLUS = this;
  38.          String var1 = (String)AccessController.doPrivileged(new GetPropertyAction("os.name"));
  39.          if (var1 != null && var1.startsWith("Windows 98")) {
  40.             return;
  41.          }
  42.  
  43.          PrinterChangeListener var2 = new PrinterChangeListener(this);
  44.          var2.setDaemon(true);
  45.          var2.start();
  46.       }
  47.  
  48.    }
  49.  
  50.    public synchronized PrintService[] getPrintServices() {
  51.       SecurityManager var1 = System.getSecurityManager();
  52.       if (var1 != null) {
  53.          var1.checkPrintJobAccess();
  54.       }
  55.  
  56.       if (this.printServices == null) {
  57.          this.refreshServices();
  58.       }
  59.  
  60.       return this.printServices;
  61.    }
  62.  
  63.    private synchronized void refreshServices() {
  64.       this.printers = this.getAllPrinterNames();
  65.       if (this.printers == null) {
  66.          this.printServices = null;
  67.       } else {
  68.          PrintService[] var1 = new PrintService[this.printers.length];
  69.          PrintService var2 = this.getDefaultPrintService();
  70.  
  71.          for(int var3 = 0; var3 < this.printers.length; ++var3) {
  72.             if (var2 != null && this.printers[var3].equals(var2.getName())) {
  73.                var1[var3] = var2;
  74.             } else if (this.printServices == null) {
  75.                var1[var3] = new Win32PrintService(this.printers[var3]);
  76.             } else {
  77.                int var4;
  78.                for(var4 = 0; var4 < this.printServices.length; ++var4) {
  79.                   if (this.printServices[var4] != null && this.printers[var3].equals(this.printServices[var4].getName())) {
  80.                      var1[var3] = this.printServices[var4];
  81.                      this.printServices[var4] = null;
  82.                      break;
  83.                   }
  84.                }
  85.  
  86.                if (var4 == this.printServices.length) {
  87.                   var1[var3] = new Win32PrintService(this.printers[var3]);
  88.                }
  89.             }
  90.          }
  91.  
  92.          if (this.printServices != null) {
  93.             for(int var5 = 0; var5 < this.printServices.length; ++var5) {
  94.                if (this.printServices[var5] instanceof Win32PrintService && !this.printServices[var5].equals(this.defaultPrintService)) {
  95.                   ((Win32PrintService)this.printServices[var5]).invalidateService();
  96.                }
  97.             }
  98.          }
  99.  
  100.          this.printServices = var1;
  101.       }
  102.    }
  103.  
  104.    public synchronized PrintService getPrintServiceByName(String var1) {
  105.       if (var1 != null && !var1.equals("")) {
  106.          if (this.printServices == null) {
  107.             String[] var4 = this.getAllPrinterNames();
  108.  
  109.             for(int var3 = 0; var3 < var4.length; ++var3) {
  110.                if (var4[var3].equals(var1)) {
  111.                   return new Win32PrintService(var1);
  112.                }
  113.             }
  114.  
  115.             return null;
  116.          } else {
  117.             for(int var2 = 0; var2 < this.printServices.length; ++var2) {
  118.                if (this.printServices[var2].getName().equals(var1)) {
  119.                   return this.printServices[var2];
  120.                }
  121.             }
  122.  
  123.             return null;
  124.          }
  125.       } else {
  126.          return null;
  127.       }
  128.    }
  129.  
  130.    boolean matchingService(PrintService var1, PrintServiceAttributeSet var2) {
  131.       if (var2 != null) {
  132.          Attribute[] var3 = var2.toArray();
  133.  
  134.          for(int var5 = 0; var5 < var3.length; ++var5) {
  135.             PrintServiceAttribute var4 = var1.getAttribute(var3[var5].getCategory());
  136.             if (var4 == null || !var4.equals(var3[var5])) {
  137.                return false;
  138.             }
  139.          }
  140.       }
  141.  
  142.       return true;
  143.    }
  144.  
  145.    public PrintService[] getPrintServices(DocFlavor var1, AttributeSet var2) {
  146.       SecurityManager var3 = System.getSecurityManager();
  147.       if (var3 != null) {
  148.          var3.checkPrintJobAccess();
  149.       }
  150.  
  151.       HashPrintRequestAttributeSet var4 = null;
  152.       HashPrintServiceAttributeSet var5 = null;
  153.       if (var2 != null && !var2.isEmpty()) {
  154.          var4 = new HashPrintRequestAttributeSet();
  155.          var5 = new HashPrintServiceAttributeSet();
  156.          Attribute[] var6 = var2.toArray();
  157.  
  158.          for(int var7 = 0; var7 < var6.length; ++var7) {
  159.             if (var6[var7] instanceof PrintRequestAttribute) {
  160.                var4.add(var6[var7]);
  161.             } else if (var6[var7] instanceof PrintServiceAttribute) {
  162.                var5.add(var6[var7]);
  163.             }
  164.          }
  165.       }
  166.  
  167.       Object var11 = null;
  168.       PrintService[] var12;
  169.       if (var5 != null && var5.get(PrinterName.class) != null) {
  170.          PrinterName var14 = (PrinterName)var5.get(PrinterName.class);
  171.          PrintService var8 = this.getPrintServiceByName(var14.getValue());
  172.          if (var8 != null && this.matchingService(var8, var5)) {
  173.             var12 = new PrintService[]{var8};
  174.          } else {
  175.             var12 = new PrintService[0];
  176.          }
  177.       } else {
  178.          var12 = this.getPrintServices();
  179.       }
  180.  
  181.       if (var12.length == 0) {
  182.          return var12;
  183.       } else {
  184.          ArrayList var15 = new ArrayList();
  185.  
  186.          for(int var16 = 0; var16 < var12.length; ++var16) {
  187.             try {
  188.                if (var12[var16].getUnsupportedAttributes(var1, var4) == null) {
  189.                   var15.add(var12[var16]);
  190.                }
  191.             } catch (IllegalArgumentException var10) {
  192.             }
  193.          }
  194.  
  195.          var12 = new PrintService[var15.size()];
  196.          return (PrintService[])var15.toArray(var12);
  197.       }
  198.    }
  199.  
  200.    public MultiDocPrintService[] getMultiDocPrintServices(DocFlavor[] var1, AttributeSet var2) {
  201.       SecurityManager var3 = System.getSecurityManager();
  202.       if (var3 != null) {
  203.          var3.checkPrintJobAccess();
  204.       }
  205.  
  206.       return new MultiDocPrintService[0];
  207.    }
  208.  
  209.    public synchronized PrintService getDefaultPrintService() {
  210.       SecurityManager var1 = System.getSecurityManager();
  211.       if (var1 != null) {
  212.          var1.checkPrintJobAccess();
  213.       }
  214.  
  215.       this.defaultPrintService = null;
  216.       this.defaultPrinter = this.getDefaultPrinterName();
  217.       if (this.defaultPrinter == null) {
  218.          return null;
  219.       } else {
  220.          if (this.printServices != null) {
  221.             for(int var2 = 0; var2 < this.printServices.length; ++var2) {
  222.                if (this.defaultPrinter.equals(this.printServices[var2].getName())) {
  223.                   this.defaultPrintService = this.printServices[var2];
  224.                   break;
  225.                }
  226.             }
  227.          }
  228.  
  229.          if (this.defaultPrintService == null) {
  230.             this.defaultPrintService = new Win32PrintService(this.defaultPrinter);
  231.          }
  232.  
  233.          return this.defaultPrintService;
  234.       }
  235.    }
  236.  
  237.    private native String getDefaultPrinterName();
  238.  
  239.    private native String[] getAllPrinterNames();
  240.  
  241.    private native long notifyFirstPrinterChange(String var1);
  242.  
  243.    private native void notifyClosePrinterChange(long var1);
  244.  
  245.    private native int notifyPrinterChange(long var1);
  246.  
  247.    // $FF: synthetic method
  248.    static long access$000(Win32PrintServiceLookup var0, String var1) {
  249.       return var0.notifyFirstPrinterChange(var1);
  250.    }
  251.  
  252.    // $FF: synthetic method
  253.    static int access$100(Win32PrintServiceLookup var0, long var1) {
  254.       return var0.notifyPrinterChange(var1);
  255.    }
  256.  
  257.    // $FF: synthetic method
  258.    static void access$200(Win32PrintServiceLookup var0) {
  259.       var0.refreshServices();
  260.    }
  261.  
  262.    // $FF: synthetic method
  263.    static void access$300(Win32PrintServiceLookup var0, long var1) {
  264.       var0.notifyClosePrinterChange(var1);
  265.    }
  266.  
  267.    static {
  268.       AccessController.doPrivileged(new LoadLibraryAction("awt"));
  269.    }
  270. }
  271.